import { createApp } from 'vue'
import App from './App.vue'
import { createPinia } from 'pinia'
import { useAppStore } from './store'
import { logger } from './utils/logger'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import 'katex/dist/katex.min.css'

// 在挂载前读取本地主题并注入类，避免首次渲染闪烁
try {
  const raw = localStorage.getItem('markgod:settings')
  if (raw) {
    const parsed = JSON.parse(raw)
    if (parsed?.theme === 'dark') {
      const el = document.getElementById('app')
      el?.classList.add('dark')
    }
  }
} catch {}

// 创建Vue应用实例
const app = createApp(App)

// 启用将渲染端日志转发到主进程文件
logger.enableFileLogging(true)

// 添加全局错误处理
app.config.errorHandler = (err, instance, info) => {
  logger.error('Vue全局错误:', { err, instance, info })
  console.error('Vue全局错误:', err, info)
}

// 添加全局未捕获异常处理
window.addEventListener('error', (event) => {
  logger.error('全局未捕获异常:', { 
    message: event.message, 
    filename: event.filename, 
    lineno: event.lineno, 
    colno: event.colno, 
    error: event.error 
  })
  console.error('全局未捕获异常:', event.error)
})

// 添加全局未处理的Promise拒绝处理
window.addEventListener('unhandledrejection', (event) => {
  logger.error('全局未处理的Promise拒绝:', { 
    reason: event.reason,
    promise: event.promise
  })
  console.error('全局未处理的Promise拒绝:', event.reason)
})

// 创建Pinia实例
const pinia = createPinia()

// 预初始化设置（读取localStorage），确保首次渲染时主题正确
const store = useAppStore(pinia)
// 如果环境支持顶层await，优先等待；否则使用Promise链保证挂载在初始化之后
const initPromise = store.initSettings()

// 安装插件
app.use(ElementPlus)
app.use(pinia)

// 挂载应用（在设置初始化完成后）
Promise.resolve(initPromise).finally(() => {
  app.mount('#app')
  logger.info('Vue应用已挂载')
})